package com.haiheng.module_main.fragment
import android.annotation.SuppressLint
import android.app.ScansManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.haiheng.common.dialog.StandardDialog
import com.haiheng.common.fragment.RouterFragment
import com.haiheng.library.log.LogUtils
import com.haiheng.library_base.adapter.BaseAdapter
import com.haiheng.library_base.dialog.LoadingDialog
import com.haiheng.library_base.model.ApplicationViewModel
import com.haiheng.library_base.model.BaseViewModel
import com.haiheng.library_base.msg.MsgCode
import com.haiheng.library_base.msg.MsgEvent
import com.haiheng.library_base.toast.ToastUtils
import com.haiheng.library_base.utils.FastClickUtil
import com.haiheng.module_main.R
import com.haiheng.module_main.adapter.BookListAdapter
import com.haiheng.module_main.databinding.FragmentBookRetirementBinding
import com.haiheng.module_main.dialog.BookDetailDialog
import com.haiheng.module_main.mode.BookInfoViewModel
import com.haiheng.module_main.mode.BookRetirementViewModel
import kotlinx.coroutines.launch

/**
 *
 * @Des:图书剔旧
 * @Author: hwz
 * @Date:2023/6/17 0017
 * @Version: 1.0
 */
class BookRetirementFragment: RouterFragment() {
    private lateinit var binding: FragmentBookRetirementBinding
    private val viewMode : BookInfoViewModel by viewModels()
    private lateinit var bookRetirementViewModel: BookRetirementViewModel
    private val bookListAdapter = BookListAdapter()

    private var mScansManager: ScansManager? = null
    private lateinit var loadingDialog : LoadingDialog
    private var layerInfoSureDialog  : StandardDialog? = null


    private val observer = Observer<MsgEvent> { msgEvent ->
        onMessageChange(msgEvent)
    }
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentBookRetirementBinding.inflate(inflater, container, false)
        return binding.root
    }
    override fun initView() {
        bookRetirementViewModel = BookRetirementViewModel(viewMode)
        loadingDialog = LoadingDialog(requireContext(), R.style.AvLoadingDialogStyle)
        binding.includeTile.tvTitle.setText("剔旧")
        binding.includeBottom.btnSubmit.setText("剔旧")
        binding.includeTile.ivBack.setOnClickListener {
            activity.navigateUp()
        }
        binding.includeTile.cbRignt.isChecked = false
        binding.includeTile.cbRignt.setOnClickListener {
            binding.includeTile.cbRignt.isChecked = true
//            mScansManager?.startScan()
        }

        binding?.rvBookList?.layoutManager = LinearLayoutManager(activity)
        binding?.rvBookList?.adapter = bookListAdapter
        bookListAdapter.setOnItemClickListener(object : BaseAdapter.OnItemClickListener{
            override fun onItemClick(holder: BaseAdapter.ViewBindHolder, position: Int) {
                var bookInfoBean = bookListAdapter.getItem(position)
                bookInfoBean.isSelect = !bookInfoBean.isSelect
                var isAllSelet = true
                for (b in bookListAdapter.getData()){
                    if (!b.isSelect){
                        isAllSelet = false
                        break
                    }
                }
                binding.includeBottom.cbAll.isChecked = isAllSelet
                bookListAdapter.notifyDataSetChanged()
            }
        })
        binding.includeBottom.cbAll.setOnClickListener {
            for (b in viewMode._bookListData?.value!!){
                b.isSelect = binding.includeBottom.cbAll.isChecked
            }
            bookListAdapter.notifyDataSetChanged()
        }
        binding.includeBottom.btnSubmit.setOnClickListener {//剔旧

            StandardDialog.newInstance().setTitle(getString(R.string.text_retirement))
                .setContent(getString(R.string.text_retirement_sure_hint))
                .setOnDialogListener(object : StandardDialog.OnDialogClickListener{
                    override fun onCancel(dialog: StandardDialog) {
                        dialog.dismiss()
                    }

                    override fun onConfirm(dialog: StandardDialog) {
                        loadingDialog.setMessage(getString(R.string.text_retirement_ing))
                        loadingDialog.show()
                        bookRetirementViewModel.bookRetirement()
                        dialog.dismiss()
                    }
                }).show(childFragmentManager)
        }
        binding.includeBottom.btnClear.setOnClickListener {
            viewMode._bookListData.postValue(listOf())
            bookListAdapter.getData().clear()
            bookListAdapter.notifyDataSetChanged()
        }
        bookListAdapter.setOnItemClickListener(object : com.haiheng.library_base.adapter.BaseAdapter.OnItemClickListener{
            override fun onItemClick(
                holder: com.haiheng.library_base.adapter.BaseAdapter.ViewBindHolder,
                position: Int
            ) {
                BookDetailDialog.newInstance()
                    .setBookDetail(bookListAdapter.getItem(position))
                    .show(childFragmentManager)
            }
        })
    }

    override fun onResume() {
        super.onResume()
        observEven()
    }

    override fun onPause() {
        super.onPause()
        clearMsg()
        mScansManager?.stopScan()
    }

    override fun initViewModel(): BaseViewModel? {
        viewMode.bookListData.observe(viewLifecycleOwner){
            binding.tvBookNum.setText("数量：${it.size}")
            bookListAdapter.setNewData(it)

            var isAllSelet = true
            for (b in it){
                if (!b.isSelect){
                    isAllSelet = false
                    break
                }
            }
            binding.includeBottom.cbAll.isChecked = isAllSelet
        }
        viewMode.showMsg.observe(viewLifecycleOwner){

            ToastUtils.showShort(it)
            loadingDialog.hide()
            if (it.startsWith("剔旧:")){
                //剔旧完成,刷新列表数据
                bookRetirementViewModel.searchBookRetirement()
            }
        }
        viewMode.layerInfo.observe(viewLifecycleOwner){
            var content = "层架号：${it.outValue} \n名称：${it.name}"
            var listener  = object : StandardDialog.OnDialogClickListener{
                override fun onConfirm(dialog: StandardDialog) {
                    binding.tvShelfNo.setText(it.name)
                    binding.includeTile.cbRignt.performClick()
                    dialog.dismiss()
                }

                override fun onCancel(dialog: StandardDialog) {
                    dialog.dismiss()
                }
            }
            if (layerInfoSureDialog == null){
                layerInfoSureDialog = StandardDialog.newInstance().setTitle(getString(R.string.hint_layer_no))
            }
            layerInfoSureDialog?.setOnDialogListener(listener)
            layerInfoSureDialog?.setContent(content)
            LogUtils.e("dddddddddd usAdd: ${layerInfoSureDialog?.isAdded}  isVisible:${layerInfoSureDialog?.isVisible}")
            if (!layerInfoSureDialog!!.isAdded){
                layerInfoSureDialog?.show(childFragmentManager)
            }

        }
        bookRetirementViewModel._bookRetirementData.observe(viewLifecycleOwner){
            bookRetirementViewModel.uopdataRetirementList()
        }
        viewMode._bookInfoByBarcode.observe(viewLifecycleOwner){ bookInfo->
            lifecycleScope.launch {
                val dataList = bookListAdapter.getData()
                var isNoExist = true //识别到的标签不存在
                dataList.forEach {
                    if (it.barCode.toString().equals(bookInfo.barCode)){
                        it.isSelect = true
                        isNoExist = false
                        return@forEach
                    }
                }
                if (isNoExist){
                    bookInfo.isSelect = true
                    viewMode.addBook(bookInfo)
                }
                dataList.sortByDescending { it.isSelect }
                bookListAdapter.notifyDataSetChanged()
            }
        }
        return viewMode
    }

    private fun onMessageChange(msgEvent: MsgEvent?) {
        when (msgEvent?.code){
            MsgCode.MSG_SCANS_BARCODE->{
                if (FastClickUtil.isFaskMsg(msgEvent.msg,200)) return //两次相同消息太快这不处理

                if (binding.includeTile.cbRignt.isChecked){
                    viewMode.searchBookInfoByBarCode(msgEvent.msg)
                }
            }
        }
    }

    private fun observEven() {
        if (ApplicationViewModel.get().even != null) {
            if (ApplicationViewModel.get().even.hasObservers()) {
                ApplicationViewModel.get().even.removeObserver(observer)
            }
            ApplicationViewModel.get().even.observe(this,observer)
        }
    }
    fun clearMsg(){
        if (ApplicationViewModel.get().even != null) {
            if (ApplicationViewModel.get().even.hasObservers()) {
                ApplicationViewModel.get().even.removeObserver(observer)
            }
        }
    }

    @SuppressLint("WrongConstant")
    override fun initLoad() {
        var manager   = activity.getSystemService("scans")
        if (manager != null){
            mScansManager = manager as ScansManager
        }
        bookRetirementViewModel.searchBookRetirement()

    }

}